最近為了面對單位的需要,希望在各網頁上可以有不同的格式呈獻,
而試著做出這線上直接產生相容於word格式的RTF檔。
簡單地說 Rich Text Format 的格式算是最相容的word檔,
在各平台間去開rtf檔,不會有像不同版本word格式造成無法讀取的狀況。
在RoR裡已可直接輸出html,XML,只要經過以下簡單的步驟,也可直接以RTF的格式輸出。
安裝相關套件
1.首先安裝Ruby Rich Text Format (RTF) Library 0.1.0,
以root身份執行 gem install rtf 即可順利安裝。
2.安裝RTF-Extensions,
可在上述網頁下載tarball後,解開,將目錄裡的 rtf 目錄到 RAILS_ROOT/lib 即可。
裝這library才可順利呈獻UTF8,以及可讓RTF檔裡有超連結的功能。
3.安裝 RTFto 的plugin
在rails的project中執行 script/plugin install git://github.com/GertThiel/rtfto.git 即裝上。
這plugin,可讓Rails用簡單的view、template語法,把RTF檔畫出來。
簡單設定
在 Item 的 Controller 中,只要加上
def show
#增加以下的 require
require 'rtf'
require 'rtf/utf8'
require 'rtf/hyperlink'
@item = Item.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @item }
format.pdf { render :layout => false }
#增加輸出 rtf 格式的選項
format.rtf { render :layout => false }
end
end
而在view中做一個 show.rtf.rtfto 的檔案,內容為:
rtf.paragraph() do |p|
#這可讓 rtf 檔中有超連結
p.hyperlink("http://MySite/items/#{@item.id}", "#{@item.title}")
end
rtf.paragraph do |p|
p << "#{@item.title}"
end
rtf.paragraph do |p|
p << "#{@item.memo}"
end
當然,裡面的中文字可很正常地顯示出來。
而要連到這rtf檔案的連結是 http://MySite/items/1.rtf。
Script 產生 RTF
如果不在 RoR 裡產生,而是做個 Script,用下指令方式產生,
以下是根據套件裡的範例檔及少許的修改,產生rtf無誤:
# load Ruby RTF first
require 'rubygems'
require 'rtf'
include RTF
# then load extensions
# 看extensions放在哪個目錄,指對就好,與在RoR的寫法上有點不同
require 'rtf-extensions/rtf/utf8.rb'
require 'rtf-extensions/rtf/hyperlink.rb'
# RoR 因有 rtfto 的plugin而不需以下這一行來宣告。
doc = RTF::Document.new(Font.new(Font::ROMAN, 'Times New Roman'))
# hyperlink example
doc.paragraph() do |p|
p << "Visit "
p.hyperlink('http://www.google.com', 'Google')
p << " and start searching the web."
end
# utf8 - works only if the Ruby script if UTF8 encoded itself...
utf8_string = "中文測試"
doc.paragraph do |p|
p << "A UTF-8 encoded string : #{utf8_string}"
end
File.open('./my_document.rtf','w') { |file| file.write(doc.to_rtf) }
至於 RTF 裡的字型變化、怎麼讓一些字是用 標楷體字型、畫表格 等變化…,
還待繼續了解及測試,但至少有了簡單的開始。